﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
//using namespace std;
//// //堆的存储
//// //堆就是一个完全二叉树；// 直接用数组顺序存储就行；
//// 
//// 
//// 
//// //向上调整算法
//const int N = 1e6 + 10;
//int n; // 标记堆的⼤⼩
//int heap[N]; // 存堆 - 默认是⼀⼤根堆
//void up(int child)
//{
//	int parent = child / 2;
//	
//	while (parent >= 1 && heap[child] > heap[parent])
//	{
//		swap(heap[child], heap[parent]);
//		// 交换之后，修改下次调整的⽗⼦关系，注意顺序不能颠倒
//		child = parent;
//		parent = child / 2;
//	}
//}
//
//// 向下调整算法
//void down(int parent)
//{
//	int child = parent * 2;
//	while (child <= n) // 如果还有孩⼦
//	{
//		// 找出两个孩⼦谁是最⼤的
//		if (child + 1 <= n && heap[child + 1] > heap[child]) child++;
//		// 最⼤的孩⼦都⽐我⼩，说明是⼀个合法的堆
//		if (heap[child] <= heap[parent]) return;
//		swap(heap[child], heap[parent]);
//		// 交换之后，修改下次调整的⽗⼦关系，注意顺序不能颠倒
//		parent = child;
//		child = parent * 2;
//	}
//}
//
//void push(int x)
//{
//	heap[++n] = x;
//	up(n);
//
//}
//
//void pop()
//{
//	swap(heap[1], heap[n]);
//	n--;
//	down(1);
//}
//
//int top()// 查头元素
//{
//	return heap[1];
//}
//int size()// //查元素个数
//{
//	return n;
//}
//int main()
//{
//	int a[10] = { 1, 41, 23, 10, 11, 2, -1, 99, 14, 0 };
//	// 将这 10 个数依次放⼊堆中
//	for (int i = 0; i <10; i++)
//	{
//		push(a[i]);
//	}
//	while (size())
//	{
//		cout << top() << " ";
//		pop();
//	}
//	return 0;
//}
